Given an $N$-dimensional euclidean vector space, the reversal of a vectors components can be produced by $k$-reflections in hyperplanes normal to $n_i$
$$ a^{'} = -(n_1 n_{2}\cdots n_{k }) a (n_k \cdots n_2 n_1 )$$where $$ k = N/2 $$
and
$$ n_i = e_i-e_{N-i} $$Note that for vector spaces with an odd number of dimensions the middle component cancels it self out. Bellow are some explicit examples, illustrating the operation for various dimensions.
In [37]:
from sympy import *
from galgebra.ga import Ga
import sympy
In [38]:
(ga,e1,e2) = Ga.build('e1 e2',g=[1,1])
a=ga.mv('a','vector')
n = sqrt(2)/2*(e1-e2)
-n*a*n
Out[38]:
In [39]:
(ga,e1,e2,e3) = Ga.build('e1 e2 e3',g=[1,1,1])
a=ga.mv('a','vector')
n = sqrt(2)/2*(e1-e3)
-n*a*n
Out[39]:
In [40]:
(ga,e1,e2,e3,e4) = Ga.build('e1 e2 e3 e4',g=[1,1,1,1])
a=ga.mv('a','vector')
n = sqrt(2)/2*(e1-e4)
m = sqrt(2)/2*(e2-e3)
m*n*a*n*m
Out[40]:
In [41]:
(ga,e1,e2,e3,e4, e5) = Ga.build('e1 e2 e3 e4 e5',g=[1,1,1,1,1])
a=ga.mv('a','vector')
n = sqrt(2)/2*(e1-e5)
m = sqrt(2)/2*(e2-e4)
a_flip = m*n*a*n*m
a_flip
Out[41]:
In [42]:
(ga,e1,e2,e3,e4, e5, e6) = Ga.build('e1 e2 e3 e4 e5 e6',g=[1,1,1,1,1,1])
a=ga.mv('a','vector')
n = sqrt(2)/2*(e1-e6)
m = sqrt(2)/2*(e2-e5)
o = sqrt(2)/2*(e3-e4)
a_flip = -m*n*o*a*o*n*m
a_flip
Out[42]:
In [43]:
def mirror(a):
e = a.Ga.mv_basis # vector basis
N = len(e) # dimension of space
n = range(N-1) # reflection vectors
a_mir = a # outputs
for i in range(len(e)/2):
n[i] = sqrt(2)/2* (e[i] - e[N-1-i])
a_mir = -n[i]*a_mir*n[i]
return a_mir
a_mir = mirror(a)
a_mir
Out[43]:
A discrete function of length $N$ can be thought of as an $N$-dimensional vector. Any such function may broken up into even and odd modes.
\begin{eqnarray*} a &=& {\frac{1}{2} (a+a^{'})} + \frac{1}{2} (a-a^{'})\\ a &=& a_e + a_o \end{eqnarray*}where $a^{'}$ is the mirrored version of $a$, as described above.
In [47]:
half = Rational(1,2)
even = lambda a: half*(a+mirror(a))
odd = lambda a: half*(a-mirror(a))
In [53]:
(ga,e1,e2) = Ga.build('e1 e2',g=[1,1])
a = ga.mv('a','vector')
a_e = even(a)
a_e
Out[53]:
In [49]:
a_o = odd(a)
a_o
Out[49]: